{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Laminar pipe flow - Hagen–Poiseuille solution"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this tutorial we use icoFoam to compute a laminar pipe flow, then we compare the numerical solution with the analytical solution. <br>\n",
    "\n",
    "You will find the instructions of how to run this case in the file README.FIRST. <br>\n",
    "\n",
    "By the way, to plot the numerical solution you need to use the utility sample to get the solution at the end of the pipe."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Remember, to execute a cell in ipython you need to press shift-enter"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The %matplotlib magic is used to specify which matplotlib backend we want to use. \n",
    "Most of the time, in the Notebook, you will want to use the inline backend which will embed plots inside the Notebook"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We now import the libraries numpy and matplotlib. <br>\n",
    "NumPy is the fundamental package for scientific computing. <br>\n",
    "Matplotlib is used for plotting."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We now use loadtxt to read the input file.  <br>\n",
    "We type np.loadtxt because loadtxt belongs to numpy which we imported with the name np.<br>\n",
    "The skiprows option is used to skip header lines.  In this case, the input file does not contain a header.<br>\n",
    "All the indormation is saved in the variable data, which is a numpy array."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "data = np.loadtxt('../postProcessing/sampleDict/108/s2_U.xy', skiprows=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We now compute the velocity profile according to Hagen–Poiseuille solution. <br>\n",
    "\n",
    "$$v_{radial} = v_{max} \\left[ 1 - \\dfrac{r^2}{R_{max}^2} \\right] $$\n",
    "\n",
    "where $v_{max}$ is the maximum axial velocity obtained from the simulation, $R_{max}$ is the maximum radius, and $r$ is the local radius."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "vmax = 1.4\n",
    "rmax = 0.5\n",
    "\n",
    "x = np.linspace(-1*rmax, rmax, 100)\n",
    "sol = vmax*(1 - x**2/rmax**2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We now plot a sample velocity profile.  <br>\n",
    "To do so, we use the plot function. <br>\n",
    "As this function belongs to matplotlib.pyplot, we append plt to plot as follows: plt.plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f0f491a9b50>]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nYQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f0f6c9fa290>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x,sol,'-')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "<br>\n",
    "<br>\n",
    "Now we can proceed to compare the analytical solution with the numerical solution. <br>\n",
    "Remember, to execute the next cell you need to run first the sample utility."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x7f0f49153290>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f0f4b5fe990>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "fig = plt.figure(figsize=(12,8))\n",
    "\n",
    "data=np.loadtxt('../postProcessing/sampleDict/108/s2_U.xy', skiprows=0)\n",
    "\n",
    "plt.plot(data[:,0],data[:,1],'o',label='icoFoam')\n",
    "\n",
    "vmax = max(data[:,1])\n",
    "rmax = 0.5\n",
    "\n",
    "x = np.linspace(-1*rmax, rmax, 100)\n",
    "sol = vmax*(1 - x**2/rmax**2)\n",
    "\n",
    "plt.plot(x,sol,'-',label='Analytical solution')\n",
    "\n",
    "plt.legend()\n",
    "plt.grid()\n",
    "plt.xlabel('Radius',fontsize=15)\n",
    "plt.ylabel('$V_{axial}$',fontsize=15)\n",
    "\n",
    "\n",
    "\n",
    "#To save a figure\n",
    "#plt.savefig('test.png', format='png', dpi=300)\n",
    "#plt.savefig('test.pdf', format='pdf', dpi=300)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For completeness, I will give you a few instructtions of how to work with arrays in numpy.<br>\n",
    "\n",
    "To create an array (in this case a vector):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 3, 4])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.array([1, 2, 3, 4])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To create a multi-dimensional array and save the values in the variable x:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "x = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To know the type of a variable you use type():"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "numpy.ndarray"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Which states that the variable x is a numpy ndarray. <br>\n",
    "To know the dimensions of the array:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2, 4)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To print one value of the array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x[0,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To print one column of the array:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 5])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "and to print a row:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 3, 4])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x[0,:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To compute the mean of the previous row:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.5"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.mean(x[0,:])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
